www.gusucode.com > VC++ 高仿QQ2008好友界面源码程序 > VC++ 高仿QQ2008好友界面源码程序/code/MyICQ/MyICQDlg.cpp
// MyICQDlg.cpp : implementation file // Download by http://www.NewXing.com #include "stdafx.h" #include "MyICQ.h" #include "MyICQDlg.h" #include "MainTabCtrl.h" #include "FolderCtrl.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define DE_WM_CLOSE WM_USER+100 #define DE_WM_CRO WM_USER+101 #define DE_WM_MIN WM_USER+102 #define DE_WM_HEAD WM_USER+103 #define DE_WM_MENU WM_USER+104 #define DE_WM_MOBILE WM_USER+105 #define DE_WM_MUSIC WM_USER+106 #define DE_WM_PET WM_USER+107 #define DE_WM_ZONE WM_USER+108 #define DE_WM_RESEARCH WM_USER+109 #define DE_WM_MAIL WM_USER+110 #define DE_WM_STATE WM_USER+111 #define DE_WM_MEM WM_USER+112 #define DE_WM_FOLDERCTRL WM_USER+113 ///////////////////////////////////////////////////////////////////////////// // CMyICQDlg dialog CMyICQDlg::CMyICQDlg(CWnd* pParent /*=NULL*/) : CDialog(CMyICQDlg::IDD, pParent) { //{{AFX_DATA_INIT(CMyICQDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CMyICQDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyICQDlg) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CMyICQDlg, CDialog) //{{AFX_MSG_MAP(CMyICQDlg) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_NCHITTEST() ON_BN_CLICKED(DE_WM_CLOSE,OnDeClose) ON_BN_CLICKED(DE_WM_MIN,Min) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CMyICQDlg message handlers BOOL CMyICQDlg::OnInitDialog() { CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here // CRect rc;GetClientRect(&rc); //Close Btn btnClose.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(rc.right-35,0,rc.right-5,19),this,DE_WM_CLOSE); btnClose.SetBmp(IDB_BIT_CLOSE_NORMAL,IDB_BIT_CLOSE_HOVER,IDB_BIT_CLOSE_HDOWN,NULL); //Cro Btn btnCro.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(rc.right-66,0,rc.right-36,19),this,DE_WM_CRO); btnCro.SetBmp(IDB_BIT_CRO_NORMAL,IDB_BIT_CRO_HOVER,IDB_BIT_CRO_HDOWN,NULL); //Min Btn btnMin.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(rc.right-97,0,rc.right-67,19),this,DE_WM_MIN); btnMin.SetBmp(IDB_BIT_MIN_NORMAL,IDB_BIT_MIN_HOVER,IDB_BIT_MIN_HDOWN,NULL); //Head Btn btnHead.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(11,37,51,77),this,DE_WM_HEAD); btnHead.SetBmp(IDB_BIT_HEAD,IDB_BIT_HEAD,IDB_BIT_HEAD,NULL); //Menu Btn btnMenu.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(0,rc.bottom-34,54,rc.bottom),this,DE_WM_MENU); btnMenu.SetBmp(IDB_BIT_MENU_NORMAL,IDB_BIT_MENU_HOVER,IDB_BIT_MENU_HDOWN,NULL); btnState.Create("隐身",WS_VISIBLE|WS_CHILD,CRect(70,50,115,70),this,DE_WM_STATE); btnState.SetIcon(IDI_STATE,16); btnMail.Create("(0)",WS_VISIBLE|WS_CHILD,CRect(125,50,165,70),this,DE_WM_MAIL); btnMail.SetIcon(IDI_MAIL,16); btnMobile.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(30,rc.bottom-55,50,rc.bottom-35),this,DE_WM_MOBILE); btnMobile.SetIcon(IDI_MOBILE,16); btnMusic.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(55,rc.bottom-55,75,rc.bottom-35),this,DE_WM_MUSIC); btnMusic.SetIcon(IDI_MUSIC,16); btnPet.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(80,rc.bottom-55,100,rc.bottom-35),this,DE_WM_PET); btnPet.SetIcon(IDI_PET,16); btnResearch.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(105,rc.bottom-55,125,rc.bottom-35),this,DE_WM_RESEARCH); btnResearch.SetIcon(IDI_RESEARCH,16); btnZone.Create(NULL,WS_VISIBLE|WS_CHILD,CRect(130,rc.bottom-55,150,rc.bottom-35),this,DE_WM_ZONE); btnZone.SetIcon(IDI_ZONE,16); CRect rcFolderCtrl;rcFolderCtrl.SetRect(rc.left+35,rc.top+89,rc.right-4,rc.bottom-68); // m_folderCtrl=new CFolderCtrl; // m_folderCtrl->Create(WS_CHILD|WS_VISIBLE,rcFolderCtrl,this,DE_WM_FOLDERCTRL); //m_folderCtrl->ShowWindow(SW_HIDE); // m_folderCtrl.getsa // CFolderCtrl *folder; // folder->Create(WS_CHILD|WS_VISIBLE,rcFolderCtrl,this,DE_WM_FOLDERCTRL); CGfxOutBarCtrl *gfx=new CGfxOutBarCtrl; DWORD dwf = CGfxOutBarCtrl::fDragItems|CGfxOutBarCtrl::fEditGroups|CGfxOutBarCtrl::fEditItems|CGfxOutBarCtrl::fRemoveGroups| CGfxOutBarCtrl::fRemoveItems|CGfxOutBarCtrl::fAddGroups|CGfxOutBarCtrl::fAnimation |CGfxOutBarCtrl::fSelHighlight; gfx->Create(WS_VISIBLE|WS_CHILD,rcFolderCtrl,this,111111,dwf); gfx->AddFolder("我的好友",0); gfx->AddFolder("我的同学",1); gfx->AddFolder("陌生人",2); gfx->AddFolder("黑名单",3); // gfx->InsertItem(0,0,"刘若英",0,0); // gfx->InsertItem(0,1,"001",0,0); // gfx->InsertItem(0,1,"002",0,0); CInternet *net=new CInternet; net->Create(NULL,NULL,WS_CHILD|WS_VISIBLE,rcFolderCtrl,this,22222222); net->ShowWindow(SW_HIDE); ///Tab tabMem.Create(NULL,WS_CHILD|WS_VISIBLE,CRect(0,90,35,300),this,DE_WM_MEM); // tabMem.AddTabItem(IDB_BIT_TAB_NORMAL,IDB_BIT_TAB_HOVER,IDB_BIT_TAB_HOVER,IDI_PAI,NULL); tabMem.SetBmp(IDB_BIT_TAB_NORMAL,IDB_BIT_TAB_HOVER,IDB_BIT_TAB_HDOWN); tabMem.SetIcon(0,IDI_PAI,gfx); tabMem.SetIcon(1,IDI_IT,net); tabMem.SetIcon(2,IDI_ONE,NULL); tabMem.SetIcon(3,IDI_HEART,NULL); tabMem.SetIcon(4,IDI_ONLINE,NULL); tabMem.m_iCurrentSelect=0; // tabMem.SetIcon(IDI_PAI,NULL); // CRect rect;GetClientRect(&rect); // CMainTabCtrl *pTab=new CMainTabCtrl; // pTab->Create(WS_VISIBLE|WS_CHILD,rect,this,10000); // CFolderCtrl *pFolder=new CFolderCtrl; // pFolder->Create(WS_VISIBLE|WS_CHILD,rect,pTab,20000); // CFolderCtrl *pFolder=new CFolderCtrl; // pFolder->Create(WS_VISIBLE|WS_CHILD,CRect(0,0,64,69),this,DE_WM_CLOSE); return TRUE; // return TRUE unless you set the focus to a control } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CMyICQDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CPaintDC dc(this); CRect rc;GetClientRect(&rc); //rc.InflateRect(CSize(2,12)); CDC memDC;memDC.CreateCompatibleDC(&dc); CBitmap bit;bit.CreateCompatibleBitmap(&dc,rc.Width(),rc.Height()); CBitmap *OldBmp = memDC.SelectObject(&bit); memDC.DrawEdge(rc,EDGE_SUNKEN,0); //-------Title1 //Title1 Left CBitmap bmpTitle1Left;bmpTitle1Left.LoadBitmap(IDB_BIT_TITLE1_LEFT); DrawBmpByPoint(&memDC,bmpTitle1Left,CPoint(0,0)); //Title1 Mid CBitmap bmpTitle1Mid;bmpTitle1Mid.LoadBitmap(IDB_BIT_TITLE1_MID); DrawBmpByCRect(&memDC,bmpTitle1Mid,CRect(64,0,rc.right-79,22)); //Title1 Right CBitmap bmpTitle1Right;bmpTitle1Right.LoadBitmap(IDB_BIT_TITLE1_RIGHT); DrawBmpByPoint(&memDC,bmpTitle1Right,CPoint(rc.right-79,0)); //-------Title2 //Title2 Left CBitmap bmpTitle2Left;bmpTitle2Left.LoadBitmap(IDB_BIT_TITLE2_LEFT); DrawBmpByPoint(&memDC,bmpTitle2Left,CPoint(0,22)); //Title2 Mid CBitmap bmpTitle2Mid;bmpTitle2Mid.LoadBitmap(IDB_BIT_TITLE2_MID); DrawBmpByCRect(&memDC,bmpTitle2Mid,CRect(63,22,rc.right-115,67)); //Title2 Right CBitmap bmpTitle2Right;bmpTitle2Right.LoadBitmap(IDB_BIT_TITLE2_RIGHT); DrawBmpByPoint(&memDC,bmpTitle2Right,CPoint(rc.right-115,22)); //-------Center //Center Left CBitmap bmpCenterLeft;bmpCenterLeft.LoadBitmap(IDB_BIT_CENTER_LEFT); DrawBmpByCRect(&memDC,bmpCenterLeft,CRect(0,89,35,rc.bottom-68)); //Center Right CBitmap bmpCenterRight;bmpCenterRight.LoadBitmap(IDB_BIT_CENTER_RIGHT); DrawBmpByCRect(&memDC,bmpCenterRight,CRect(rc.right-4,89,rc.right,rc.bottom-68)); //-------Bottom //Bottom Left CBitmap bmpBottomLeft;bmpBottomLeft.LoadBitmap(IDB_BIT_BOTTON_LEFT); DrawBmpByPoint(&memDC,bmpBottomLeft,CPoint(0,rc.bottom-68)); //Bottom Mid CBitmap bmpBottomMid;bmpBottomMid.LoadBitmap(IDB_BIT_BOTTOM_MID); DrawBmpByCRect(&memDC,bmpBottomMid,CRect(73,rc.bottom-68,rc.right-68,rc.bottom)); //Bottom Right CBitmap bmpBottomRight;bmpBottomRight.LoadBitmap(IDB_BIT_BOTTOM_RIGHT); DrawBmpByPoint(&memDC,bmpBottomRight,CPoint(rc.right-68,rc.bottom-68)); //BitBlt dc.BitBlt(0,0,rc.Width(),rc.Height(),&memDC,0,0,SRCCOPY); // CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CMyICQDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } //Change Client-Msg To Caption-Msg UINT CMyICQDlg::OnNcHitTest(CPoint point) { // TODO: Add your message handler code here and/or call default UINT nHitTest = CDialog::OnNcHitTest(point); if(nHitTest==HTCLIENT) nHitTest=HTCAPTION; return nHitTest; } //Set Bmp by Point void CMyICQDlg::DrawBmpByPoint(CDC *pDC, CBitmap &mainBmp, const CPoint &pt) { CDC tmpDC;tmpDC.CreateCompatibleDC(pDC); BITMAP tmpBmp; mainBmp.GetBitmap(&tmpBmp); CBitmap *oldBmp = tmpDC.SelectObject(&mainBmp); pDC->BitBlt(pt.x,pt.y,tmpBmp.bmWidth,tmpBmp.bmHeight,&tmpDC,0,0,SRCCOPY); tmpDC.SelectObject(&oldBmp); oldBmp->DeleteObject(); } //Set Bmp By CRect void CMyICQDlg::DrawBmpByCRect(CDC *pDC, CBitmap &bitRect, CRect &rect) { CDC tmpDC;tmpDC.CreateCompatibleDC(pDC); BITMAP tmpBmp; bitRect.GetBitmap(&tmpBmp); CBitmap *oldBmp = tmpDC.SelectObject(&bitRect); for(int y=rect.top;y<rect.bottom;y+=tmpBmp.bmHeight) { for(int x=rect.left;x<rect.right;x+=tmpBmp.bmWidth) { pDC->BitBlt(x,y,tmpBmp.bmWidth,tmpBmp.bmHeight,&tmpDC,0,0,SRCCOPY); } } tmpDC.SelectObject(&oldBmp); oldBmp->DeleteObject(); } //Close void CMyICQDlg::OnDeClose() { exit(0); } void CMyICQDlg::Min() { ShowWindow(SW_MINIMIZE); }